属性提供了指定和检查节点的状态、外观和行为的手段。例如,属性可以定义颜色,指示按钮是否按下或指定项的对齐方式。
您可通过设置 Kanzi Studio 中的属性值和访问代码中的属性值来使用属性,而无需理解属性系统的工作原理。然而,为了充分发挥 Kanzi 属性系统的特点,您应该熟悉属性系统的工作原理。
属性提供了一个 uniform 的方式来访问Kanzi 节点的数据,使许多Kanzi 子系统可以操纵数据。例如,这样您可以动画化属性值、提供属性值之间的绑定,以及监视属性值更改。
任何属性值都可能受到多个输入源的影响。属性系统定义如何从所有输入中解析属性值的规则并解析当前值。例如,您可以直接指定属性值,部分属性可以有默认值,样式可以影响属性值,动画和状态机可以修改属性值。通过这种方式,便可通过提供自动应用的规则,最小化必须要手动更改值的地方。
请参阅创建属性类型。
每个属性都通过属性类型描述。属性类型唯一地描述属性的使用位置、名称及属性保存的值的类型。数据类型定了属性的数据类型。
例如,Node::Visible
属性类型用于 Node
类和派生类并控制节点的可视性。您可以使用其名称 (Node.Visible
) 在其运行期间查找属性类型,因为它属于布尔类型,所以接受 true 或 false 值。
请注意在 Kanzi Studio 中,您可以有更多特定属性类型,但其数据类型只能来自上文所列。例如,即使枚举值将值的范围限定为枚举中定义的条目,但仍用整数值表示它们。
大多数 Kanzi 属性在使用它们的类中定义。这类属性用于配置定义它们的对象的外观、状态或行为。例如,文本块 (Text Block) 节点中的文本 (Text) 属性定义节点中渲染的文本,而可见性 (Visible) 属性控制节点及其所有派生节点的可视性。
不过,有些 Kanzi 属性配置外观、行为或其他对象的状态。例如,材质可以定义漫射颜色 (Diffuse Color) 属性,使您可以使用那个材质将该属性分配给节点;网格布局 (Grid Layout) 定义行 (Row) 和列 (Column) 属性,但它们会被分配给网格布局 (Grid Layout) 节点下的项,而非网格布局 (Grid Layout) 节点本身。在 Kanzi 中,这些属性被称为附加属性。
每种属性类型都会定义属性的默认值。当收到查询时,如果没有直接或间接(通过样式、继承等其他方式)指定属性值,Kanzi 返回属性的默认值。例如,即使未将每个节点的 Node::Visible
属性指定为 true,但属性的默认值为 true。当收到查询时,所有节点默认都可见。
不指定值,但在开发应用程序时使用默认值可以节省时间。或者,对有些属性类型而言,没有属性值是一种条件。例如,属性 Node::Width
和 Node::Height
让用户控制特定节点的尺寸,例如,将宽度 (Width) 及高度 (Height) 设置为 100 像素,就会强制将控件尺寸设为 100 像素宽及 100 像素高。不指定这些值,就可让控件自行决定其尺寸。例如,图像 (Image) 节点可根据其显示的图像决定自身尺寸,而 堆栈布局 (Stack Layout) 节点可确定为是其所有项的尺寸。
查询属性值会生成一项结果,而确定值时,属性系统会评估可影响属性值的多个源。系统会按特定顺序评估属性值源。
Kanzi Engine 根据这些优先级规则(最高者为先)解析运行时值:
setProperty()
函数设置局部属性值。例如,要将可见性 (Visible) 属性的值设置为 false,可使用node.setProperty(Node::VisibleProperty, false)
Node::setVisible
函数设置 Node::Visible
属性。有关辅助函数,请参阅定义该属性的类的参考资料。node.Visible = false
setProperty("Node.Visible", false)
Node::Font
为可继承属性。如果希望可以显示文本的所有控件都使用相同的字体,您可以在场景图的最高层级将字体 (Font) 属性的值设置(仅一次)为特定字型,Kanzi 会将同一字型应用至所有子孙节点。Node::HorizontalAlignment
和 Node::VerticalAlignment
的默认值为 HorizontalAlignmentCenter
和 VerticalAlignmentCenter
。Node2D
会将这些属性的默认值重写为 HorizontalAlignmentLeft
和 VerticalAlignmentTop
。请参阅默认属性值。